package SecondeStage.MianXiangDuiXiang.AbstractClass.InnerClass;

public class MemberClass {
    public static void main(String[] args) {
        Outer05 outer05 = new Outer05();
        outer05.f1();
        // 外部其他类使用成员内部类的成员的两种方式
        // 1.相当于吧new Inner05()当作outer05的一个成员
        Outer05.Inner05 inner05 =outer05.new Inner05();
        // 2.在外部类中编写一个方法，返回一个Inner05对象
        Outer05.Inner05 inner6 = outer05.getInner05Instance();

    }
}

class Outer05{
    private int n1 =10;
    public String name="张三";
    private void hi(){
        System.out.println("你好");
    }
    // 成员内部类是定义在外部类的成员位置，并且没有static修饰
    // 可以添加任意的修饰符，因为成员内部类的地位本来就是外部类的一个成员,所以作用域为整个类体
    // 可以访问外部类的所有成员
    class Inner05{
        private int n1 =66;
        public void say(){
            System.out.println("n1="+n1 +"  name="+name);
            hi();
            // 如果外部类和内部类的成员重名时，默认遵循就近原则，如果想要访问外部类的成员，使用 外部类名.this.成员 去访问
            System.out.println("n1="+n1 +"  name="+name + "  外部类的n1="+Outer05.this.n1);
        }
    }

    public void f1(){
        // 访问成员内部类的成员
        Inner05 inner05 =new Inner05();
        inner05.say();
    }

    public Inner05 getInner05Instance(){
        return new Inner05();
    }
}
